import type { PropType } from 'vue'
import type { SwiperModule } from '../../types/shared'

const props = {
  list: Array as PropType<any[]>,
  virtualList: Array as PropType<any[]>,
  customStyle: Object as PropType<Record<string, any>>,
  modules: {
    type: Array as PropType<SwiperModule[]>,
    default: undefined
  },
  init: Boolean,
  direction: String as PropType<'horizontal' | 'vertical'>,
  oneWayMovement: Boolean,
  swiperElementNodeName: {
    type: String,
    default: 'SWIPER-CONTAINER'
  },
  touchEventsTarget: String,
  initialSlide: Number,
  speed: Number,
  cssMode: Boolean,
  updateOnWindowResize: Boolean,
  resizeObserver: Boolean,
  nested: Boolean,
  focusableElements: String,
  width: Number,
  height: Number,
  preventInteractionOnTransition: Boolean,
  userAgent: String,
  url: String,
  edgeSwipeDetection: [Boolean, String],
  edgeSwipeThreshold: Number,
  autoHeight: Boolean,
  setWrapperSize: Boolean,
  virtualTranslate: Boolean,
  effect: String,
  breakpoints: Object as PropType<Record<string, any>>,
  breakpointsBase: String,
  spaceBetween: [Number, String],
  // @ts-ignore
  slidesPerView: [Number, String],
  maxBackfaceHiddenSlides: Number,
  slidesPerGroup: Number,
  slidesPerGroupSkip: Number,
  slidesPerGroupAuto: Boolean,
  centeredSlides: Boolean,
  centeredSlidesBounds: Boolean,
  slidesOffsetBefore: Number,
  slidesOffsetAfter: Number,
  normalizeSlideIndex: Boolean,
  centerInsufficientSlides: Boolean,
  watchOverflow: Boolean,
  roundLengths: Boolean,
  touchRatio: Number,
  touchAngle: Number,
  simulateTouch: Boolean,
  shortSwipes: Boolean,
  longSwipes: Boolean,
  longSwipesRatio: Number,
  longSwipesMs: Number,
  followFinger: Boolean,
  allowTouchMove: Boolean,
  threshold: Number,
  touchMoveStopPropagation: Boolean,
  touchStartPreventDefault: Boolean,
  touchStartForcePreventDefault: Boolean,
  touchReleaseOnEdges: Boolean,
  uniqueNavElements: Boolean,
  resistance: Boolean,
  resistanceRatio: Number,
  watchSlidesProgress: Boolean,
  grabCursor: Boolean,
  preventClicks: Boolean,
  preventClicksPropagation: Boolean,
  slideToClickedSlide: Boolean,
  loop: Boolean,
  loopedSlides: Number,
  loopPreventsSliding: Boolean,
  rewind: Boolean,
  allowSlidePrev: Boolean,
  allowSlideNext: Boolean,
  swipeHandler: Boolean,
  noSwiping: Boolean,
  noSwipingClass: String,
  noSwipingSelector: String,
  passiveListeners: Boolean,
  containerModifierClass: String,
  slideClass: String,
  slideActiveClass: String,
  slideVisibleClass: String,
  slideFullyVisibleClass: String,
  slideBlankClass: String,
  slideNextClass: String,
  slidePrevClass: String,
  wrapperClass: String,
  lazyPreloaderClass: String,
  lazyPreloadPrevNext: Number,
  runCallbacksOnInit: Boolean,
  observer: Boolean,
  observeParents: Boolean,
  observeSlideChildren: Boolean,
  a11y: [Boolean, Object],
  autoplay: [Boolean, Object],
  controller: Object,
  coverflowEffect: Object,
  cubeEffect: Object,
  fadeEffect: Object,
  flipEffect: Object,
  creativeEffect: Object,
  cardsEffect: Object,
  hashNavigation: [Boolean, Object],
  history: [Boolean, Object],
  keyboard: [Boolean, Object],
  mousewheel: [Boolean, Object],
  navigation: [Boolean, Object],
  pagination: [Boolean, Object],
  parallax: [Boolean, Object],
  scrollbar: [Boolean, Object],
  thumbs: Object,
  virtual: [Boolean, Object],
  zoom: [Boolean, Object],
  grid: Object,
  freeMode: [Boolean, Object],
  enabled: Boolean
}

export default props
